package day6;

/*
* 继承后子父类之前的成员变量和方法特点
* 1.如果子父类中有同名的方法或属性，子类默认调用自己的属性或方法
* 2.如果想要在子类中调用父类的同名方法或属性，需要使用super指代，super指代父类对象
* 3.父类中私有的属性或方法不能被子类调用
* 4.父类不能调用子类特有的属性或方法
* 5.如果一个类没有显式的继承一个父类，默认的父类为Object，Object为所有类的超类
* */
public class Demo2 {

    public static void main(String[] args) {
//        //创建子类对象
//        Zi zi = new Zi();
//
////        System.out.println("num的属性值为:"+zi.num);
//        zi.showNum();
//
//
//
//
//        //创建父类对象
//        Fu fu = new Fu();
//
        Demo2 demo2 = new Demo2();

        System.out.println(demo2);
        System.out.println(demo2);
    }

    @Override
    public String toString(){
        return "name:张三"+"age:18";
    }
}

/*
* 父类
* */
class Fu{
    //定义成员变量
    //父类中的私有属性和方法只能在本类中使用，不能被子类或者其他类调用
    private int num = 3;

    public int num2 = 4;

    public void showNum(){
        System.out.println("Fu类中的num:"+num);
    }

    public void showNum2(){
        System.out.println("...");
    }
}

/*
* 子类继承Fu类
* */
class Zi extends Fu{
    //定义成员变量
    public int num = 5;

    public int num2 = 6;

    //子类特有的属性
    public int num3 = 8;

    //方法重写:在保留父类功能的基础上，增加子类特有功能
    @Override
    public void showNum(){
        System.out.println("子类的num2:"+num2);

        //如果想要在子类中调用父类的同名方法或者属性，需要使用super调用，super指代父类对象
        System.out.println("父类的num2:"+super.num2);

        //调用父类的方法
        super.showNum();
    }

    //子类重写父类方法时，必须保证权限大于等于父类的权限
    //除了权限修饰符外，子类中的返回值，方法名，参数列表必须和父类的一致
    @Override
    public void showNum2(){

    }

}